import Vue from 'vue'
import App from './App.vue'
import store from './store'
import router from './router'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(ElementUI)
import Axios from 'axios'
Vue.prototype.$axios = Axios
import moment from 'moment'
// 全局函数与变量
import Global from './Global'
Vue.use(Global)

// 全局拦截
Axios.interceptors.request.use(
  config => {
    return config
  },
  // 错误处理,跳转到error页面
  error => {
    router.push({ path: "/error" })
    return Promise.reject(error)
  }
)
// 全局响应拦截
Axios.interceptors.response.use(
  res => {
    if (res.data.code === "401") {
      // 401表示没有登录,提示没有登录
      Vue.prototype.notifyError(res.data.msg)
      // 修改vuex的showLogin状态,显示登录组件
      store.dispatch("setShowLogin", true)
    }
    if (res.data.code === "500") {
      // 500表示服务器异常,跳转error页面
      router.push({ path: "/error" })
    }
    return res
  },
  Error => {
    // error错误页面
    router.push({ path: "/error" })
    return Promise.reject(Error)
  }
)

// 全局拦截器,在进入需要用户权限的页面前校验是否已经登录
router.beforeResolve((to, from, next) => {
  const loginUser = store.state.user.user
  // 判断路由是否设置相应校验用户权限
  if (to.meta.requireAth) {
    if (!loginUser) {
      // 若没有登录，则显示登录组件
      store.dispatch("setShowLogin", true)
      if (from.name == null) {
        //此时，是在页面没有加载，直接在地址栏输入链接，进入需要登录验证的页面
        next("/")
        return
      }
      // 终止导航
      next(false)
      return
    }
  }
  next()
})


// 相对时间过滤器,把时间戳转换成时间
// 格式: 2020-02-25 21:43:23
Vue.filter('dateFormat', (dataStr) => {
  return moment(dataStr).format('YYYY-MM-DD HH:mm:ss')
})

//全局组件
import MyMenu from './components/MyMenu'
Vue.component(MyMenu.name, MyMenu)
import MyList from './components/MyList'
Vue.component(MyList.name, MyList)
import MyLogin from './components/MyLogin'
Vue.component(MyLogin.name, MyLogin)
import MyRegister from './components/MyRegister'
Vue.component(MyRegister.name, MyRegister)
Vue.config.productionTip = false


new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')
